package com.android.jogogenius;


import java.util.Timer;
import java.util.TimerTask;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;


/* Nesta Classe é que realmente o jogo acontece. Aqui encontra-se o método responsável
 * pelo Loop do Jogo
 */
public class TelaJogo extends Activity {
	
	Button bt01, bt02, bt03, bt04, btSair;
	RadioButton rb01, rb02, rb03, rb04;
	int lista[] = new int[100]; //Trocar isto por uma encadeada
	int tamanhoLista = 0; 		//Tamanho atual da lista
	int posicaoAtualLista = 0; 	//Controle da posição atual da lista
	boolean sortear = true; 	/*Flag para indicar se está na hora de sortear o próximo
							  		valor ou não
								*/
    @Override
    /*
     * Todo o jogo ocorre em um Loop (representado pelo método abaixo). O ciclo do Loop 
     * de um jogo se divide em 3 etapas distintas:
     * - Processar a lógica do jogo;
     * - Desenhar a Tela;
     * - Exibir o resultado do desenho para o usuário.
     */
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tela_jogo);
        
        /*
         * Registrar as Listeners para capturar os eventos da tela
         */
        registraListeners();
                        
        //Desabilitando os RadioButtons
        rb01.setEnabled(false);
        rb02.setEnabled(false);
        rb03.setEnabled(false);
        rb04.setEnabled(false);
        
        while(true){
        
        //Aqui recomeça a lógica do gerador
        /*
         * A primeira coisa é verificar se podemos incluir um elemento na lista
         */
        if (sortear){ //Neste caso devemos incluir um elemento na lista
        	inserirLista();
        	sortear=!sortear;
        }else{
        	/*
        	 * Chegou a hora de exibir os valores sorteados da lista na tela.
        	 * Para isso é necessário que o valor seja exibido por 1 segundo no RadioButton e 
        	 * após esse tempo ele fique apagado por mais 1 segundo antes de exibir o próximo valor.
        	 * Esse processo deve se seguir até que o fim da lista seja alcançado.
        	 */
 
        	    posicaoAtualLista = 0; //Inicialmente devemos ir para o início da lista
        	    exibirSorteio(); //Este Método deve percorrer toda a lista exibindo os valores previamente sorteados
        	    sortear=!sortear;
        }
        

        /* Estas Classes foram declaradas para poder usar o Timer em outra Thread sem atrapalhar a do próprio JOGO!!!
         * PROGRAMAR É UMA ARTE!!! Só funcionou dessa forma....
         */
        //Classe para apagar os LEDs
        class CustomTimerTask2 extends TimerTask{
        	private Handler mHandler = new Handler();
        	private Context context;
        	public CustomTimerTask2(Context con){
        		this.context=con;
        	}
        	public void run(){
        		new Thread(new Runnable() {
                    @Override
                    public void run() {
                    	mHandler.post(new Runnable() {
                            @Override
                            public void run() {
                    			rb01.setChecked(false);
                    			rb02.setChecked(false);
                    			rb03.setChecked(false);
                    			rb04.setChecked(false);
                    			posicaoAtualLista++;
                    			exibirSorteio();
                            }
                    	});
                    }
        		}).start();
        	}
        }

        //Classe para acender o LED sorteado
        class CustomTimerTask extends TimerTask{
        	private Handler mHandler = new Handler();
        	private Context context;
        	public CustomTimerTask(Context con){
        		this.context=con;
        	}
        	public void run(){
        		new Thread(new Runnable() {
                    @Override
                    public void run() {
                    	mHandler.post(new Runnable() {
                            @Override
                            public void run() {
                            	mostrarRadioButton();
                                Timer timer2= new Timer();
                                CustomTimerTask2 updateSorteio2 = new CustomTimerTask2(TelaJogo.this);
                                timer2.schedule(updateSorteio2,1000);
                            }
                    	});
                    }
        		}).start();
        	}
        }
        
        //Usando a classe declarada acima!!!
        Timer timer= new Timer();
        CustomTimerTask updateSorteio = new CustomTimerTask(TelaJogo.this);
        timer.schedule(updateSorteio, 0, 2000); //Sorteio continuo a cada 2 segs.

        
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_tela_jogo, menu);
        return true;
    }
    
    public int geradorAleatorio(){
    	return (int) (4*Math.random()+1); 
    }
    
    public void exibirSorteio(){
    	if (posicaoAtualLista >= tamanhoLista){ //Chegou ao final da lista devemos retornar
    		return;
    	}
    	
    }
    
    public void mostrarRadioButton(){
    	
    	int valorAtual = lista[posicaoAtualLista];
        
    	switch (valorAtual) {
		case 1:
			rb01.setChecked(true);
			rb02.setChecked(false);
			rb03.setChecked(false);
			rb04.setChecked(false);
			break;

		case 2:
			rb01.setChecked(false);
			rb02.setChecked(true);
			rb03.setChecked(false);
			rb04.setChecked(false);
			break;
			
		case 3:
			rb01.setChecked(false);
			rb02.setChecked(false);
			rb03.setChecked(true);
			rb04.setChecked(false);
			break;

		case 4:
			rb01.setChecked(false);
			rb02.setChecked(false);
			rb03.setChecked(false);
			rb04.setChecked(true);
			break;

		default:
			rb01.setChecked(false);
			rb02.setChecked(false);
			rb03.setChecked(false);
			rb04.setChecked(false);
			break;
		}
    	posicaoAtualLista++; //Passamos para o próximo elemento
    }
    //Método utilizado para inserir um elemento na lista de sorteios
    public void inserirLista(){
    	if (tamanhoLista < 100){
    		lista[tamanhoLista] = geradorAleatorio();// Inseriu e incrementou o tamanho 
    		tamanhoLista++;
    	}
    }
    
    public void registraListeners(){
        //Relação dos botões com XML
        bt01   = (Button) findViewById(R.TelaJogo.bt01);
        bt02   = (Button) findViewById(R.TelaJogo.bt02);
        bt03   = (Button) findViewById(R.TelaJogo.bt03);
        bt04   = (Button) findViewById(R.TelaJogo.bt04);
        btSair = (Button) findViewById(R.TelaJogo.btSair);
        
        //Caso clique no botão Sair
        btSair.setOnClickListener(new View.OnClickListener() {	
			@Override
			public void onClick(View v) {
				// Clicou no btSair
				try {
					TelaJogo.this.finish();
				} catch (Throwable e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
        
        //Relação dos RadioButtons com XML
        rb01 = (RadioButton) findViewById(R.TelaJogo.rb01);
        rb02 = (RadioButton) findViewById(R.TelaJogo.rb02);
        rb03 = (RadioButton) findViewById(R.TelaJogo.rb03);
        rb04 = (RadioButton) findViewById(R.TelaJogo.rb04);
    }
}
